package com.wlz.utils;

import org.springframework.util.StringUtils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 有关事件的工具类
 *
 * @author ：Administrator
 * @date ：2018/10/16/016 10:10
 */


public class DateUtils {
    /**
     * 根据当前日期获取一周的日期集合
     *
     * @return
     */
    public static List<String> getOneWeekDate() {
        List<String> oneWeek = new ArrayList<>();
        Date date = new Date();
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        cal.setTime(date);
        // 判断要计算的日期是否是周日，如果是则减一天计算周六的，否则会出问题，计算到下一周去了
        // 获得当前日期是一个星期的第几天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期
        // 设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根据日历的规则，给当前日期减去星期几与一个星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        cal.getTime();

        oneWeek = new ArrayList<>();
        oneWeek.add(sdf.format(cal.getTime()));

        int loopTime = 6;

        for (int i = 0; i < loopTime; i++) {
            cal.add(Calendar.DATE, 1);
            oneWeek.add(sdf.format(cal.getTime()));
        }

        return oneWeek;
    }

    /**
     * 将当前时间转换成时间戳
     */
    public static String timeStamp() {
        String timeStamp = String.valueOf(System.currentTimeMillis());

        return timeStamp;

    }

    /**
     * 返回意向购车时间的最后一天
     *
     * @param days 预计购车的时间（天）
     * @return 返回意向购车时间的最后一天
     */
    public static String addExtraTime(Integer days) {
        String planBuyTime = "";
        Date date = new Date();

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, days);


        Date deadline = calendar.getTime();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        planBuyTime = sdf.format(deadline);


        return planBuyTime;
    }

    /**
     * 获取确切购车时间
     *
     * @param planBuyTime 预计购车时间
     * @return 返回 时间格式的字符串
     */
    public static String getExactIntentBuyTime(Integer planBuyTime) {
        String exactPlanBuyTime;
        int days = 0;
        if (StringUtils.isEmpty(planBuyTime)) {
            exactPlanBuyTime = "2000-01-01";
        } else {
            switch (planBuyTime) {
                case 1:
                    days = 3;
                    break;

                case 2:
                    days = 30;
                    break;
                case 3:
                    days = 90;
                    break;
                case 4:
                    days = 180;
                    break;
                case 5:
                    days = 365;
                    break;
                case 6:
                    days = 545;
                    break;

                default:
                    break;
            }
            exactPlanBuyTime = addExtraTime(days);
        }


        return exactPlanBuyTime;
    }

    /**
     * 根据当前日期获取两周的日期集合
     *
     * @return 日期集合
     */
    public static List<String> getTwoWeekDate() {
        List<String> oneWeek = new ArrayList<>();
        Date date = new Date();
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        cal.setTime(date);
        // 判断要计算的日期是否是周日，如果是则减一天计算周六的，否则会出问题，计算到下一周去了
        // 获得当前日期是一个星期的第几天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期
        // 设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根据日历的规则，给当前日期减去星期几与一个星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        cal.getTime();

        oneWeek = new ArrayList<>();
        oneWeek.add(sdf.format(cal.getTime()));

        int loopTime = 6;

        for (int i = 0; i < loopTime; i++) {
            cal.add(Calendar.DATE, 1);
            oneWeek.add(sdf.format(cal.getTime()));
        }

        return oneWeek;
    }


    /**
     * 任意一段时间内的每天的日期
     *
     * @param date       当前时间
     * @param beforeDays 时间跨度（天）
     * @return 日期集合
     */
    public static List<String> getDatePeriod(Date date, int beforeDays) {
        List<String> datePeriodList = new ArrayList<String>();
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int inputDayOfYear = cal.get(Calendar.DAY_OF_YEAR);
        for (int i = beforeDays - 1; i >= 0; i--) {
            cal.set(Calendar.DAY_OF_YEAR, inputDayOfYear - i);
            datePeriodList.add(dateFormat.format(cal.getTime()));
        }
        return datePeriodList;
    }


    /**
     * 获取当前时间
     *
     * @return 当前时间
     */
    public static String getCurrentTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentTime = sdf.format(new Date());
        return currentTime;
    }


}

